/* ************************************************************************
> File Name:     backTracking1.cpp
> Author:        程序员lyl
> 微信公众号:    雨特宙
> Created Time:  2024年03月25日 星期一 09时38分33秒
> Description:  给定两个整数 n 和 k，返回 1 ... n 中所有可能的 k 个数的组合。

示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],  
 ************************************************************************/

#include <iostream>
#include <vector>
using namespace std;

vector<vector<int>> result;
vector<int> path;

void backTracking(int n, int k, int startIndex){
    if(path.size() == k){
        result.push_back(path);
        return;
    }
    for(int i = startIndex; i <= n; i++){
        path.push_back(i);
        backTracking(n,k,i+1);
        path.pop_back();
    }
}
void PrintVecofVec2(vector<vector<int>>& A) {

 for(int i = 0; i < A.size(); i++) {       // 行数
   for(int j = 0; j < A[i].size(); j++) {  // A[i].size() 第i行的列数
     cout << A[i][j] << " ";
   }
   cout << endl;
 }
}

int main(){

    int n = 4, k=2;
    backTracking(n,k,1);
    //:wcout<<result;
    PrintVecofVec2(result);

}
